package com.divemotor.ventarepuestosinternet.beans.lazy;

import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import com.divemotor.ventarepuestosinternet.beans.adapter.ClienteAdapter;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.service.ClienteService;
import com.divemotor.ventarepuestosinternet.util.Paginacion;

public class UsuarioClienteLazy extends LazyDataModel<ClienteAdapter> {

	public static final Logger logger = Logger.getLogger(UsuarioClienteLazy.class); 
	private static final long serialVersionUID = 1L;
	
	private List<ClienteAdapter> listaClientes;
	private ClienteService clienteService;
	private Paginacion paginacion;
	private Integer nroRegistros;

	public UsuarioClienteLazy(ClienteService clienteService, Paginacion paginacion) {
		logger.info("UsuarioClienteLazy inicio constructor");
		this.paginacion 	= paginacion;
		this.clienteService = clienteService;
	}
	
	@Override
	public List<ClienteAdapter> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
		try {	
			paginacion.setInicioPagina(first);
			paginacion.setFinPagina(pageSize);
			paginacion.setOrdenarLabel(sortField);
			paginacion.setDireccionOrden(sortOrder.toString());
			
			listaClientes  	= clienteService.listar(paginacion);
			nroRegistros 	= clienteService.cantidadClientes(paginacion.getCliente());
			setRowCount(nroRegistros);
    	} catch (DivemotorBusinessException e) {
    		logger.error("EX* load: " + e.getMessage());
		}
		return listaClientes;
	}
	
	@Override
	public ClienteAdapter getRowData(String clienteId) {
		Integer id = Integer.valueOf(clienteId);
		for (ClienteAdapter cliente : listaClientes) {
			if(id.equals(cliente.getIdCliente())){
				return cliente;
			}
		}
		return null;
	}
	
	@Override
	public Object getRowKey(ClienteAdapter cliente) {
		return cliente.getIdCliente();
	}
	
	@Override
	public void setRowIndex( int rowIndex ){
	   if ( rowIndex == -1 || getPageSize() == 0 ){
		   super.setRowIndex( -1 );
	   }else{
		   super.setRowIndex( rowIndex % getPageSize() );
	   }
	}	

	public List<ClienteAdapter> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<ClienteAdapter> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public Integer getNroRegistros() {
		return nroRegistros;
	}

	public void setNroRegistros(Integer nroRegistros) {
		this.nroRegistros = nroRegistros;
	}
	
}
